iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0

20190928

前言

今天要介紹的是Swift中也很常用的集合型別與列舉。
在資料的處理中,集合算是很常遇到與使用的,今日內容有Array, Dictionary,Tuple Set and enum 這幾種型別。

現在,我們馬上開始!

如何建立playground,請參考Day4的文章
https://ithelp.ithome.com.tw/articles/10217428

Array

https://developer.apple.com/documentation/swift/array

看官方文件中Array可以知道,其實中Element是個泛型,可以放入內建型別(Int, String),或是自訂的型別(class...)

現在我們來看看程式碼

//var names: Array<String> = ["mike", "peter", "bonnie"]

var names: [String] = ["mike", "peter", "bonnie"]

// 取出第一筆資料
names[0]

// error: Execution
//names[3]

// 取出總數量
names.count // 3
  • Array內的Element,必須存放相同的型別

  • Array的索引Index是從0開始計算

  • 如果取出超過索引的資料,可是會報錯的

  • 此範例的陣列,總數量為3

  • Array還有很多好用的方法,請參考ref6 官方文件

Dictionary

一般稱為字典,是一種key value pairs組合,可以透過key來得到對應的value值,

一樣來看看程式碼

// 建立一個字典儲存考試成績
let classScores:[String : [Int]] = [
    "mike": [80, 90, 100],
    "mike": [80, 90, 100],
    "peter": [90, 90, 90],
    "bonnie": [100, 100, 100]
]

// 更新字典的值
classScores.updateValue([100, 100, 100], forKey: "peter")
classScores["mike"] = [100, 100, 100]

// 取出字典的值
for (name, scores) in classScores {
    print("\(name)的成績: 國文: \(scores[0]), 英文: \(scores[1]), 數學: \(scores[2])")
}
/*
 mike的成績: 國文: 100, 英文: 100, 數學: 100
 bonnie的成績: 國文: 100, 英文: 100, 數學: 100
 peter的成績: 國文: 100, 英文: 100, 數學: 100
 */
  • 我們宣告一個字典,用來存放考試分數

  • 更新字典的值,可用字典["索引"],或是updateValue()方法來更新都可以

  • 並使用for loop來取出每個人的分數

  • 而value的型別為[Int]整數陣列

  • 這邊要注意key是不可重複的,不然會報錯

  • 更多Dictionary用法,請參考ref7官方文件

Set

與Array非常類似,可以存放同一類型(型別)的資料,但是每個值都是唯一,不可重複。
例如要存放撲克牌1-52,不重複的牌卡,就可以使用Set

一樣來看看程式碼

// 設定第一個Set
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]

// 取出Set的內容
let firstPrime = primes[0] // 2

// 取出Set的數量
var primeCount = primes.count // 26

// 清空所有Set的內容
primes.removeAll()
primeCount = primes.count // 0

//* 設定第一個Set來存放質數集合
//* 取出Set的數量可以用primes.count
//* 清空Set所有內容可以用removeAll()方法

列舉enum

// 定義一個enum
enum cloudService: CaseIterable {
    case aws, azure, gcp, none
}

// 取出enum的值
var amazon = cloudService.aws
var microsoft = cloudService.azure
var google = cloudService.gcp

// 也可以搭配switch使用
let cloud1 = cloudService.aws
switch cloud1 {
case .aws:
    print("use \(amazon)")
case .azure:
    print("use \(microsoft)")
case .gcp:
    print("use \(google)")
default:
    print("no use")
}
// use aws

// 取出所有列舉的內容,搭配CaseIterable
for cloud in cloudService.allCases {
    print(cloud)
}
// aws, azure, gcp, none
  • 定義了一個enum裡面有四個值

  • enum與switch可以做很好的搭配

  • 如果要巡覽所有enum的值,可以搭配CaseIterable這個protocol

總結

在今天的文章裡,我們介紹了幾種型別,包含了Array, Dictionary, Set, Tuple, enum,一般程式碼在寫的時候,也還滿常用到的。
而Ref8中的Swift 起步走這本電子書,寫的滿不錯的,作者本身也有購買,如果預算有限也可以看前一版的open source版本(真是佛心)。
作者本身在學習時,看了滿多種類的教材,將會在本系列文章的最後,統一整理成一篇,推薦給大家。
今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 彼得潘的 Swift iOS App 開發問題解答集
    https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86

  2. iOS 13 & Swift 5 - The Complete iOS App Development Bootcamp - Angela Yu
    https://www.udemy.com/course/ios-13-app-development-bootcamp/

  3. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  4. 心智圖軟體Xmind
    https://www.xmind.net/

  5. 彼得潘的Swift程式設計入門
    https://www.tenlong.com.tw/products/9789572246573

  6. 《The Swift Programming Language》正體中文版
    https://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/01_The_Basics.html#floating-point_numbers

  7. Apple Developer Document [array]
    https://developer.apple.com/documentation/swift/array

  8. Apple Developer Document [Dictionary]
    https://developer.apple.com/documentation/swift/dictionary

  9. Apple Developer Document [Tuple]
    https://docs.swift.org/swift-book/ReferenceManual/Types.html

  10. Apple Developer Document [Set]
    https://developer.apple.com/documentation/swift/set

  11. Enumerations
    https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html

  12. Swift 起步走 集合型別
    https://itisjoe.gitbooks.io/swiftgo/content/ch1/collection_types.html


上一篇
Day11 流程控制
下一篇
Day13 在Swift的世界中朗誦HelloWorld (1)
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言